package ACWing.SearchAndGraphTheory.DFS;
//186. 巴士
//没有现成的类暂时写了一半
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

/**
 * @author :chenjie
 * @date :Created 2022/12/21 16:15
 */
public class Bus {
    static class Pall{
        int l;
        int r;

        public Pall(int l, int r) {
            this.l = l;
            this.r = r;
        }

        @Override
        public String toString() {
            return "Pall{" +
                    "l=" + l +
                    ", r=" + r +
                    '}';
        }
    }
    static int n;
    static int N=2000,M=60;
    static int[]bus=new int[60];//本分钟的车辆数
    static List<Map<Integer,Pall>> list=new ArrayList<>();
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        for (int i = 0; i < n; i++) {
            int t=sc.nextInt();
            bus[t]++;
        }
        for (int i = 0; i < 60; i++) {
            for (int j = i+1; i + j < 60; j++) {
                if(check(i,j)){
                    //list.add());
                }
            }
        }
        //sort
    }



    private static boolean check(int i, int j) {//判断当前的首项和公差是否可以覆盖到尾部
        for (int k = i; k < 60; k += j) {
            if(bus[k]==0){
                return false;
            }
        }
        return true;
    }
}
//正确代码如下：
//#include <cstring>
//#include <iostream>
//#include <algorithm>
//#include <vector>
//
//using namespace std;
//
//        typedef pair<int, int> PII;
//
//        const int N = 2000, M = 60;
//
//        int n;
//        int bus[M];
//        vector<pair<int, PII>> routes;
//
//        bool check(int a, int d)
//        {
//        for (int i = a; i < 60; i += d)
//        if (!bus[i])
//        return false;
//        return true;
//        }
//
//        bool dfs(int depth, int sum, int start)
//        {
//        if (!depth) return sum == n;
//
//        // 枚举选哪个路线
//        for (int i = start; i < routes.size(); i ++ )
//        {
//        auto r = routes[i];
//        int a = r.second.first, d = r.second.second;
//        if (r.first * depth + sum < n) continue;
//        if (!check(a, d)) continue;
//        for (int j = a; j < 60; j += d) bus[j] -- ;
//        if (dfs(depth - 1, sum + r.first, i)) return true;
//        for (int j = a; j < 60; j += d) bus[j] ++ ;
//        }
//
//
//        return false;
//        }
//
//        int main()
//        {
//        scanf("%d", &n);
//        for (int i = 0; i < n; i ++ )
//        {
//        int t;
//        scanf("%d", &t);
//        bus[t] ++ ;
//        }
//
//        for (int a = 0; a < 60; a ++ )
//        for (int d = a + 1; a + d < 60; d ++ )
//        if (check(a, d))
//        routes.push_back({(59 - a) / d + 1, {a, d}});
//
//        sort(routes.begin(), routes.end(), greater<pair<int, PII>>());
//
//        int depth = 0;
//        while (!dfs(depth, 0, 0)) depth ++ ;
//
//        printf("%d\n", depth);
//
//        return 0;
//        }